package com.teamone.etl.datasource.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.teamone.etl.datasource.entity.DataSource;
import com.teamone.etl.exception.CustomException;
import java.util.List;
import java.util.Map;

/**
 * (DataSource)表服务接口
 *
 * @author makejava
 * @since 2021-01-06 14:22:50
 */
public interface DataSourceService extends IService<DataSource> {

    /**
     * 删除数据源检查是否连接
     *
     * @param idList 数据源id集合
     * @return 删除是否成功 true/false
     @throws CustomException 统一异常
     */
    Boolean removeByIdsAndCheckIsConnect (List<Integer> idList) throws CustomException;

    /**
     *修改数据源
     * @param dataSource 要修改的数据源
     */
    void updateSource(DataSource dataSource);

    /**
     * 查询所有数据源
     * @return List<DataSource> 所有数据源的集合
     */
    List<DataSource> selectAll ();

    /**
     * 测试mysql连接
     * @param dataSource 数据源
     * @return 连接是否成功 true/false
     */
    boolean testMysqlConnect(DataSource dataSource);

    /**
     * 测试redis连接
     * @param dataSource 数据源详细信息
     * @return true连接/false未连接
     */
    boolean testRedisConnect(DataSource dataSource);

    /**
     *  模糊分类查询
     *
     * @param typeId 分类Id
     * @param name   连接数据库名称
     * @param page   每页数据
     * @param size   当前页数
     * @return  部分数据
     */
    PageInfo<DataSource> search(Integer typeId, String name, Integer page, Integer size);

    /**
     * 查询所有未被禁用的数据源
     * @return 返回数据源集合
     */
    List<DataSource> getAllNotDisabled ();

    /**
     根据主键id获得(DataSource)
     @param id 主键id
     @return DataSource
     */
    DataSource getDataSourceById(Integer id);

    /**
     BI数据分析-执行SQL语句
     @return List<Map<String, String>> 字段相关信息,查询到的数据
     @throws CustomException 统一异常
      * @param dataSourceId 数据源id
     * @param dataBaseName 数据库名称
     * @param tableName 表名
     * @param sql SQL语句
     * @param shouldExecuteRuleEngine 是否执行规则引擎
     */
    Map<String,Object> dataAnalysis(Integer dataSourceId, String dataBaseName, String tableName, String sql, boolean shouldExecuteRuleEngine) throws CustomException;

    /**
     * 查询所有未被禁用的数据 清除用户名/密码/库名
     * @return 返回数据源集合
     */
    List<DataSource> getAllNotDisabledAndClearSensitiveInformation ();
    /**
     * 根据详细信息 查询所有未被禁用的数据 清除用户名/密码/库名
     * @param description '详细信息'
     * @return 返回数据源集合
     */
    List<DataSource> getAllNotDisabledByDescriptionAndClearSensitiveInformation (String description);
}